import router from '@/router'
import store from '@/store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
// import { asyncRoutes } from '@/router'
// 前置导航守卫
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  // 开启进度条
  NProgress.start()
  const token = store.getters.token
  if (token) {
    // 有token

    // 获取用户信息(回应NavBar组件中created调用action)
    /*
      1. 判断vuex中是否有用户信息
      2. 如果没有，提交action,获取用户信息即可
    */
    if (!store.getters.name) {
      const userInfo = await store.dispatch('user/getUserInfo')
      console.log(userInfo, '小傲娇')// 因为vuex中已经return出去，所以可以拿到个人信息

      // 放到vuex中
      // const otherRouter = asyncRoutes.filter(item => {
      // console.log(item.children[0].name)
      // 判断登录的角色的个人信息中的menus是否包含在动态路由名字中，true就存到otherRouter中
      //   if (userInfo.roles.menus.includes(item.children[0].name)) {
      //     return true
      //   } else {
      //     return false
      //   }
      // })
      // console.log(otherRouter)
      // 登录获取资料的时候，会自动查出该用户拥有哪些权限
      // 获取动态路由
      // router.addRoutes([
      //   ...otherRouter, // asyncRoutes给了所有的路由，要动态的给，otherRouter根据个人西信息给的
      //   { path: '*', redirect: '/404', hidden: true }
      // ])
      // // 动态路由存到vuex中，动态获取
      // store.commit('permission/addRouters', otherRouter)

      const otherRouter = await store.dispatch('permission/filterRoutes', userInfo.roles.menus)
      router.addRoutes([
        ...otherRouter, // asyncRoutes给了所有的路由，要动态的给，otherRouter根据个人信息给的
        { path: '*', redirect: '/404', hidden: true }
      ])
      next({ ...to, replace: true }) // 解决再次进入当前页面会白屏（）
      return
    }

    if (to.path === '/login') {
      next('/')
      NProgress.done()
    } else {
      next()
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
      NProgress.done()
    }
  }
})

// 后置导航守卫
router.afterEach((to, from) => {
  // 关闭进度条
  NProgress.done()
})
